﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Resources;
using System.Web.UI;
using System.Web.UI.WebControls;
using ICSharpCode.SharpZipLib.Zip;

namespace jQuery.WebControls.UI
{
   
    /// <summary>
    /// Clase para definir el estilo predefinido que van a tener los controles jQuery.WebControls.UI en la página
    /// </summary>
    class EstiloUI : Estilo
    {
        private const string urlCss = "~/css/ui";
        private const string nombreCss = "jquery-ui-1.8.17.custom.css";
        private DefaultStyle estilo;        

        public EstiloUI(Page page, DefaultStyle estilo) : base(page)
        {   
            EstiloPredefinido = estilo;
        }

        #region METODOS Y FUNCIONES PUBLICAS       
        /// <summary>
        /// Elimina una etiqueta link de la cabecera cuya propiedad href coincida con la del estilo predefinido CssPredefinido 
        /// </summary>
        /// <param name="CssPredefinido">Estilo predefinido que se quiere quitar de la cabecera</param>
        public void QuitarCSSenPagina(DefaultStyle CssPredefinido)
        {
            EstiloPredefinido = estilo;            
            QuitarCSSenPagina();
        }
        #endregion

        #region PROPIEDADES
        /// <summary>
        /// Estilo predefinido seleccionado
        /// </summary>
        public DefaultStyle EstiloPredefinido
        {
            get
            {
                return estilo;
            }
            set
            {
                estilo = value;
            }
        }
        /// <summary>
        /// URL de la hoja de estilos a asociar a la página
        /// </summary>
        protected override string NombreCss
        {
            get { return nombreCss; }
        }
        /// <summary>
        /// Path relativo de la hoja de estilos a asociar a la página del estilo predefinido seleccionado
        /// </summary>
        protected override string RecursoUrlCss
        {
            get { return urlCss + EstiloPredefinido.ToString(); }
        }                
        #endregion

        
        /// <summary>
        /// Comprueba la existencia de la hoja de estilo y su inclusión en la cabecera de la página ASP.NET. Si no existe, crea
        /// el recurso en el directorio CSS y si no se ha añadido a la cabecera, añade la etiqueta link
        /// </summary>                
        protected override void ComprobarCSS()
        {
            string pathCss = Pagina.Server.MapPath(RecursoUrlCss);
            string mainCssFile = Pagina.Server.MapPath(UrlArchivoCss);

            if (!System.IO.File.Exists(mainCssFile))
            {
                string fileZIP = pathCss + ".zip";
                CrearCssDir(pathCss);
                ResourceManager rm = new ResourceManager(typeof(EstiloUI));
                
                Byte[] bt = (Byte[])rm.GetObject(estilo.ToString());
                FileStream fs = new FileStream(fileZIP , FileMode.Create);
                BinaryWriter bw = new BinaryWriter(fs);
                bw.Write(bt);
                bw.Close();
                fs.Close();               
                
                FastZip zip = new FastZip();
                zip.ExtractZip(fileZIP, pathCss, "");
                zip = null;
                File.Delete(fileZIP);
            }

            if (!CheckCssHeader(Pagina.ResolveClientUrl(UrlArchivoCss)))
            {
                Pagina.Header.Controls.Add(getCssHeader(Pagina.ResolveClientUrl(UrlArchivoCss)));                
            }
        }
    }
}
